package com.luobr.backend.model.vo.image;

import cn.hutool.core.util.ObjUtil;
import cn.hutool.json.JSONUtil;
import com.luobr.backend.model.entity.Image;
import com.luobr.backend.model.vo.user.UserLoginVO;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author: 罗念笙
 * @date: 2025/2/25 15:42
 * 图像返回包装类
 */
@Data
public class ImageVO implements Serializable {

    // id
    private Long id;  

    // 图片 url
    private String url;  

    // 图片名称
    private String name;

    // 简介
    private String introduction;  

    // 标签
    private List<String> tags;

    // 分类
    private String category;  

    // 文件体积
    private Long imgSize;

    // 图片宽度
    private Integer imgWidth;

    // 图片高度
    private Integer imgHeight;

    // 图片比例
    private Double imgScale;

    // 图片格式
    private String imgFormat;

    // 图片主色调
    private String imgColor;

    // 创建时间
    private Date createTime;

    // 创建用户信息
    private UserLoginVO user;

    // 空间 id
    private Long spaceId;

    // 权限列表
    private List<String> permissionList = new ArrayList<>();

    // 序列号
    private static final long serialVersionUID = 1L;  
  
    /**  
     * 封装类转对象  
     */  
    public static Image voToObj(ImageVO imageVO) {
        if (imageVO == null) {
            return null;  
        }
        Image image = new Image();
        BeanUtils.copyProperties(imageVO, image);
        // 类型不同，需要转换  
        image.setTags(JSONUtil.toJsonStr(imageVO.getTags()));
        return image;
    }

    /**
     * 对象转封装类
     *
     * @param image 图片信息
     * @param user 用户信息
     * @return 封装后的图片信息
     */
    public static ImageVO objToVo(Image image,UserLoginVO user) {
        // 对象转封装类
        if (image == null) {
            return null;
        }
        ImageVO imageVO = new ImageVO();
        BeanUtils.copyProperties(image, imageVO);
        // 类型不同，需要转换
        imageVO.setTags(JSONUtil.toList(image.getTags(), String.class));
        // 关联用户信息
        if (ObjUtil.isNotEmpty(user)) {
            imageVO.setUser(user);
        }
        return imageVO;
    }
}
